home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / e / emodls01.lha / emodules / crunchmania / crmscrunch.e < prev    next >
Text File  |  1980-07-17  |  4KB  |  120 lines

  1. OPT PREPROCESS
  2.  
  3. /*
  4. *-- AutoRev header do NOT edit!
  5. *
  6. *   Project         :   Test program for CrM.library
  7. *   File            :   crmscrunch.e
  8. *   Copyright       :   © Michael Mutschler
  9. *   Author          :   Piotr Gapinski
  10. *   Creation Date   :   14.12.95
  11. *   Current version :   1.1
  12. *   Translator      :   AmigaE v3.1+
  13. *
  14. *   REVISION HISTORY
  15. *
  16. *   Date          Version         Comment
  17. *   ---------     -------         ------------------------------------------
  18. *                 1.0             first release
  19. *   14.12.95      1.1             AmigaE version
  20. *
  21. *-- REV_END --*
  22. */
  23.  
  24. /*
  25.  This is just an example program of how to use the CrM.library
  26.  from AmigaE.
  27.  All it does is crunch a file in LZH & sample mode (data save model).
  28. */
  29.  
  30. MODULE 'libraries/crm','crm','dos/dos',
  31.        'utility/tagitem'
  32.  
  33. #define PROGRAMVERSION '$VER: crmscrunch 1.1 (14.12.95)'
  34.  
  35. ENUM  ERR_OK, ERR_ARGS, ERR_NOLIB, ERR_STRUCT, ERR_NOFILE,
  36.       ERR_NOSIZE, ERR_NOMEM, ERR_READ, ERR_CRUNCHFAIL, ERR_WRITE,
  37.       ERR_CRUNCHED
  38.  
  39. PROC main() HANDLE
  40.   DEF rdargs=NIL,args:PTR TO LONG,
  41.       crunch=NIL:PTR TO cmcrunchstruct,
  42.       handle=NIL,mem=NIL,size=0,newsize=0,templ,
  43.       data:PTR TO dataheader
  44.  
  45.   templ:='SOURCE/A,DEST/A'
  46.   IF (rdargs:=ReadArgs(templ,args,NIL))=NIL THEN Raise(ERR_ARGS)
  47.  
  48.   IF (args[]=NIL OR args[1]=NIL) THEN Raise(ERR_ARGS)
  49.   IF args
  50.     WriteF('source: \s\ndestination: \s\n',args[],args[1])
  51.   ENDIF
  52.  
  53.   IF (crmbase:=OpenLibrary(CRMNAME,CRMVERSION))=NIL THEN Raise(ERR_NOLIB)
  54.   crunch:=CmAllocCrunchStructA(
  55.        [CMCS_ALGO,CM_LZH OR CM_SAMPLE OR CMF_OVERLAY OR CMF_LEDFLASH,
  56.        TAG_DONE])
  57.   IF crunch=NIL THEN Raise(ERR_STRUCT)
  58.  
  59.   IF (handle:=Open(args[],MODE_OLDFILE))=NIL THEN Raise(ERR_NOFILE)
  60.   Seek(handle,0,OFFSET_END)
  61.   size:=Seek(handle,0,OFFSET_BEGINNING)
  62.   IF size=0 THEN Raise(ERR_NOSIZE)
  63.   NEW data
  64.   IF (Read(handle,data,SIZEOF dataheader))<>SIZEOF dataheader THEN Raise(ERR_READ)
  65.   IF (CmCheckCrunched(data))<>0 THEN Raise(ERR_CRUNCHED)
  66.   Seek(handle,0,OFFSET_BEGINNING)
  67.  
  68.   IF (mem:=New(size))=NIL THEN Raise(ERR_NOMEM)
  69.   IF (Read(handle,mem,size))<>size THEN Raise(ERR_READ)
  70.   Close(handle)
  71.  
  72.   crunch.src:=mem
  73.   crunch.srclen:=size
  74.   crunch.dest:=mem
  75.   crunch.destlen:=size
  76.   crunch.datahdr:=data
  77.   WriteF('--- C R U N C H I N G ---\n')
  78.   IF (newsize:=CmCrunchData(crunch))=0 THEN Raise(ERR_CRUNCHFAIL)
  79.  
  80.   IF (handle:=Open(args[1],MODE_NEWFILE))=NIL THEN Raise(ERR_NOFILE)
  81.   IF (Write(handle,data,SIZEOF dataheader))<>SIZEOF dataheader THEN Raise(ERR_WRITE)
  82.   IF (Write(handle,mem,newsize))<>newsize THEN Raise(ERR_WRITE)
  83.  
  84.   WriteF('oldfile: "\s" length: \d\n',args[],size)
  85.   WriteF('newfile: "\s" length: \d\n',args[1],newsize)
  86.   WriteF('pack ratio: \d%\n',100-Div(100*newsize,size))
  87.  
  88. EXCEPT DO
  89.   IF rdargs<>NIL THEN FreeArgs(rdargs)
  90.   IF handle<>NIL THEN Close(handle)
  91.   IF crunch<>0 THEN CmFreeCrunchStruct(crunch)
  92.   IF mem<>NIL THEN Dispose(mem)
  93.   IF data<>NIL THEN END data
  94.   IF crmbase<>NIL THEN CloseLibrary(crmbase)
  95.   SELECT exception
  96.   CASE ERR_ARGS
  97.     WriteF('Bad args! (try "crmscrunch ?")\n')
  98.   CASE ERR_NOLIB
  99.     WriteF('Couldnt open crm.library!\n')
  100.   CASE ERR_STRUCT
  101.     WriteF('Couldnt allocate struct!\n')
  102.   CASE ERR_NOFILE
  103.     WriteF('File open failed!\n')
  104.   CASE ERR_NOSIZE
  105.     WriteF('Requested file is empty!\n')
  106.   CASE ERR_NOMEM
  107.     WriteF('No free memory!\n');
  108.   CASE ERR_READ
  109.     WriteF('Error while reading!\n')
  110.   CASE ERR_CRUNCHFAIL
  111.     WriteF('Crunching failed!\n')
  112.   CASE ERR_WRITE
  113.     WriteF('Error while writing!\n')
  114.   CASE ERR_CRUNCHED
  115.     WriteF('Source file allready crunched!\n')
  116.   ENDSELECT
  117. ENDPROC
  118.  
  119. CHAR PROGRAMVERSION,0
  120.